/*****************************************************************************************
**  Author:jxx 2023
**  QQ:283591387
**  框架文档： http://doc.volcore.xyz/
*****************************************************************************************/
//此js文件是用来自定义扩展业务代码，在当前[表.vue]文件中也可以实现业务处理

let extension = {
  components: {
    //查询界面扩展组件
    gridHeader: '',
    gridBody: '',
    gridFooter: '',
    //新建、编辑弹出框扩展组件
    modelHeader: '',
    modelBody: '',
    modelRight: '',
    modelFooter: ''
  },
  tableAction: '', //指定某张表的权限(这里填写表名,默认不用填写)
  buttons: { view: [], box: [], detail: [] }, //扩展的按钮
  methods: {
    //下面这些方法可以保留也可以删除
    onInit () {  //框架初始化配置前，
      //示例：在按钮的最前面添加一个按钮
      //   this.buttons.unshift({  //也可以用push或者splice方法来修改buttons数组
      //     name: '按钮', //按钮名称
      //     icon: 'el-icon-document', //按钮图标：https://element.eleme.cn/#/zh-CN/component/icon
      //     type: 'primary', //按钮样式:https://element-plus.gitee.io/zh-CN/component/button.html
      //     //color:"#eee",//自定义按钮颜色
      //     onClick: function () {
      //       this.$Message.success('点击了按钮');
      //     }
      //   });
      //树形维护
      this.buttons.splice(5, 0, {
        name: '树形维护', //按钮名称
        icon: 'el-icon-document', //按钮图标https://element.eleme.cn/#/zh-CN/component/icon
        type: 'primary', //按钮样式vue2版本见iview文档button，vue3版本见element ui文档button
        plain: true,
        onClick: () => {
          this.bomTreeEdit()
        }
      })
      //示例：设置修改新建、编辑弹出框字段标签的长度
      // this.boxOptions.labelWidth = 150;
    },
    bomTreeEdit () {
      var rows = this.getSelectRows()
      this.$tabs.open({
        text: '树形维护',
        path: '/BomTree',
        query: { bomId: rows[0].BomId }//参数名
      });
    },
    onInited () {
      //框架初始化配置后
      //如果要配置明细表,在此方法操作
      //this.detailOptions.columns.forEach(column=>{ });
      this.initNextBomSelectTable();
      this.initMaterialDetailSelectTable()
    },

    initNextBomSelectTable () {
      this.detailOptions.columns.forEach((item) => {

        if (item.field == 'NextBomNo') {
          item.readonly = false;
          item.url = 'api/MaterialsBom/search';
          item.columns = [
            { field: 'BomId', title: 'BomId', type: 'int', width: 110, hidden: true },
            //设置search:true,则字段可以搜索
            { field: 'BillNo', title: 'Bom编码', type: 'string', width: 80, search: false },
            { field: 'MaterialId', title: 'MaterialId', type: 'int', width: 110, search: false },
            { field: 'MaterialNo', title: '物料编码', type: 'string', width: 110, search: false },
            { field: 'MaterialName', title: '物料名称', type: 'string', width: 80, search: false },
            { field: 'Spec', title: '规格', type: 'string', width: 120 },
            // { field: 'UnitId', title: '计量单位', bind: { key: '招采计量单位', data: [] }, type: 'int', width: 120 },
            { field: 'Remark', title: '备注', type: 'string', width: 100 }
          ];


          item.onSelect = (editRow, rows) => {
            editRow.NextBomId = rows[0].BomId;
            editRow.NextBomNo = rows[0].BillNo;
            editRow.MaterialId = rows[0].MaterialId;
            editRow.MaterialName = rows[0].MaterialName;
            editRow.MaterialNo = rows[0].MaterialNo;
            editRow.Spec = rows[0].Spec;
            // editRow.UnitId = rows[0].UnitId + '';
          };

          //param:请求的参数
          item.loadBefore = (editRow, param, callback) => {
            //loadType=1按回车调用的查询，loadType=1输入框变化调用的查询，loadType=undefined默认页面加载
            //这里可以实现只加载回车事件
            // if(params.loadType!=1){
            //     return false;
            // }

            //(上面如果设置了item.inputReaonly，这里就不能添加表单的值过滤，否则无法显示数据)
            //方式1、手动设置查询条件
            // param.wheres.push({
            //       name:"GoodsName",
            //       value:editRow.GoodsName,
            //       displayType:"like"
            // })
            //方式2、给param.value设置值，后台手动处理查询条件
            //上面设置了inputReadonly后这里就不用设置了
            console.log(editRow)
            param.value = editRow.MaterialId;
            callback(true);
          };


          /****************下面这些配置不是必须的**************/
          //表格数据加载后处理
          //editRow:当前正在编辑的行
          //rows:后台返回的数据
          item.loadAfter = (editRow, rows, callback, result) => {
            callback(true);
          };

          //监听输入框变动与回车事件
          item.onKeyPress = (val, $event, row) => {
            console.log(val);
            if ($event.keyCode == 13) {
              console.log('按了回车');
            }
            //清空值时给其他字段设置值
            // if(!val&&value+''!='0'){
            //     row.xx=null;
            // }
          }
          //设置弹出框高度(默认200)
          item.height = 200;
          //设置弹出框宽度(默认500)
          item.selectWidth = 500;
          item.textInline = true; //设置表格超出显示...
          //设置表格是否单选
          item.single = true;
          //隐藏分页
          item.paginationHide = true;
        }
      });

    },
    initMaterialDetailSelectTable () {

      //如果是一对多明细，给二级明细表绑定下拉搜索:
      //二级表：this.details[0].columns.forEach
      //三级表：this.subDetails[0].columns.forEach
      //0表示第几张表,其他操作不变按下面的配置

      //配置编辑表单下拉框table搜索选项
      this.detailOptions.columns.forEach((item) => {

        if (item.field == 'MaterialNo') {
          item.readonly = false;
          //配置请求的接口地址
          //可以使用生成的页面接口，注意接口权限问题，如果提示没有权限,参照后台后开发文档上的重写权限示例
          //item.url = 'api/Demo_Goods/getPageData';

          //尽量自定义接口，见下面的文档描述，或者Demo_GoodsController类的方法Search
          item.url = 'api/Material/materialDetailSearch';

          //输入框只读操作，需要将columns的search字段设置为true，否则无法过滤数据
          //item.inputReadonly=true;
          //设置显示的字段
          item.columns = [

            //设置search:true,则字段可以搜索
            { field: 'MaterialId', title: 'MaterialId', type: 'int', width: 110, hidden: true, search: false },
            { field: 'MaterialClassfiyId', title: '物料分类', bind: { key: '物料分类级联', data: [] }, type: 'int', width: 120 },
            { field: 'Code', title: '物料编码', type: 'string', width: 110, search: false },
            { field: 'Name', title: '物料名称', type: 'string', width: 80, search: false },
            { field: 'Spec', title: '规格', type: 'string', width: 120 },
            { field: 'MaterialTypeId', title: '物料属性', bind: { key: '物料属性', data: [] }, type: 'int', width: 120 },
            { field: 'MaterialUnitId', title: '单位', bind: { key: '计量单位', data: [] }, type: 'int', width: 120 },
            // { field: 'UnitId', title: '计量单位', bind: { key: '招采计量单位', data: [] }, type: 'int', width: 120 },


          ];

          //选中table数据后，回写到表单
          //editRow:当前正在编辑的行
          //rows:选中的行
          item.onSelect = (editRow, rows) => {
            editRow.MaterialId = rows[0].MaterialId;
            editRow.MaterialName = rows[0].Name;
            editRow.MaterialNo = rows[0].Code;
            editRow.Spec = rows[0].Spec;
            editRow.MaterialTypeId = rows[0].MaterialTypeId + '';
            editRow.UnitId = rows[0].MaterialUnitId;
            // 选择物料后设置其他字段默认值
            editRow.UnitQty = 1;
            editRow.IsBackflush = '0';
            editRow.IsLot = '0';
            editRow.IsCriticalParts = '0';
            editRow.IsSpecialParts = '0';
          };

          /****下面的这些都是可以选配置，上面的是必填的******/

          //(输入框搜索)表格数据加载前处理
          //editRow:当前正在编辑的行
          //param:请求的参数
          item.loadBefore = (editRow, param, callback) => {
            //loadType=1按回车调用的查询，loadType=1输入框变化调用的查询，loadType=undefined默认页面加载
            //这里可以实现只加载回车事件
            // if(params.loadType!=1){
            //     return false;
            // }

            //(上面如果设置了item.inputReaonly，这里就不能添加表单的值过滤，否则无法显示数据)
            //方式1、手动设置查询条件
            // param.wheres.push({
            //       name:"GoodsName",
            //       value:editRow.GoodsName,
            //       displayType:"like"
            // })
            //方式2、给param.value设置值，后台手动处理查询条件
            //上面设置了inputReadonly后这里就不用设置了
            param.value = editRow.MaterialNo;
            callback(true);
          };


          /****************下面这些配置不是必须的**************/
          //表格数据加载后处理
          //editRow:当前正在编辑的行
          //rows:后台返回的数据
          item.loadAfter = (editRow, rows, callback, result) => {
            callback(true);
          };

          //监听输入框变动与回车事件
          item.onKeyPress = (val, $event, row) => {
            console.log(val);
            if ($event.keyCode == 13) {
              console.log('按了回车');
            }
            //清空值时给其他字段设置值
            // if(!val&&value+''!='0'){
            //     row.xx=null;
            // }
          }
          //设置弹出框高度(默认200)
          item.height = 200;
          //设置弹出框宽度(默认500)
          item.selectWidth = 500;
          item.textInline = true; //设置表格超出显示...
          //设置表格是否单选
          item.single = true;
          //隐藏分页
          item.paginationHide = true;
        }
      });

    },
    searchBefore (param) {
      //界面查询前,可以给param.wheres添加查询参数
      //返回false，则不会执行查询
      return true;
    },
    searchAfter (result) {
      //查询后，result返回的查询数据,可以在显示到表格前处理表格的值
      return true;
    },
    addBefore (formData) {
      //新建保存前formData为对象，包括明细表，可以给给表单设置值，自己输出看formData的值
      return true;
    },
    updateBefore (formData) {
      //编辑保存前formData为对象，包括明细表、删除行的Id
      return true;
    },
    rowClick ({ row, column, event }) {
      //查询界面点击行事件
      this.clearSelection();
      this.$refs.table.$refs.table.toggleRowSelection(row); //单击行时选中当前行;
    },
    modelOpenAfter (row, currentAction, iscopyclick) {

      this.setFormReadonly(false);

      if (this.currentAction == 'Add') {
        this.editFormFields.IsEnabled = 1;
        this.boxButtons.forEach((btn) => {
          if (btn.name == '保存') {
            btn.hidden = false;
            //或者设置只读
            // btn.readonly = true;
          }

        });
      }
      else if (iscopyclick) {
        this.editFormFields.IsEnabled = 1;
        this.editFormFields.BillNo = null;
        this.boxButtons.forEach((btn) => {
          if (btn.name == '保存') {
            btn.hidden = false;
            //或者设置只读
            // btn.readonly = true;
          }

        });
      }
      else {
        if (row.AuditStatus != 0) {
          this.setFormReadonly(true);
          this.boxButtons.forEach((btn) => {
            if (btn.name == '保存') {
              btn.hidden = true;
              //或者设置只读
              // btn.readonly = true;
            }

          });
        }
        else {
          this.boxButtons.forEach((btn) => {
            if (btn.name == '保存') {
              btn.hidden = false;
              //或者设置只读
              // btn.readonly = true;
            }
          });

        }

      }


    }
  }
};
export default extension;
